import router from '@/router'
import store from '@/store'

const whiteList = [
    '/',
    '/login',
]

router.beforeEach(async (to, from, next) => {
    // 获取token
    const hasToken = sessionStorage.getItem('token')

    if (hasToken) {
        // 已登录
        if (to.path === '/login') {
            // 重置令牌
            await store.dispatch('user/resetToken')
            router.go(0)
            next()
        } else {
            // 接下来执行用户角色逻辑
            // 先判断是否有角色
            if (store.getters.hasRoles) {
                next()
            } else {
                try {
                    const { roles } = await store.dispatch('user/getInfo')
                    // 动态生成路由
                    const accessRoutes = await store.dispatch('permission/generateRoutes', roles)
                    // 添加
                    router.addRoutes(accessRoutes)
                    // 继续路由切换
                    next({ ...to, replace: true })
                } catch (error) {
                    console.log('生成动态路由出错信息：', error)
                    // 出错重置令牌
                    await store.dispatch('user/resetToken')
                    next('/')
                }
            }
        }
    } else {
        // 未登录
        // 白名单直接过
        if (whiteList.indexOf(to.path) !== -1) {
            next()
        } else {
            // 重定向去登录
            next({ path: '/' })
        }
    }
})
